import allure
from airtest.core.api import *
from common.airtest.airtest_base import AirtestBase, exists_1
from common.log.log import log
from config.conf import BASE_DIR
from po.jinhua.applets_po.my.my_address_page import MyAddressPage
from po.jinhua.applets_po.order_details_page import OrderDetailsPage


class SubmitOrderPage:
    """提交订单页面"""

    def __init__(self):
        sleep(0.5)

    @allure.step('提交订单')
    def submit_order(self, select_coupon_mode=0, invoicing_mode=0, pay='微信支付'):
        try:
            log.info('进入提交订单页')
            self.set_shipping_address()  # 设置收货地址
            self.select_coupon(select_coupon_mode)  # 选择优惠券
            self.invoicing(invoicing_mode)  # 开具发票
            self.input_remarks_text()  # 填写备注
            self.select_payment_method(pay)  # 选择支付方式
            AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/立即结算.png")  # 立即结算
            return SubmitOrderPage()
        except Exception as e:
            log.error(f'提交订单出现异常为：{e}')
            raise e

    @allure.step('设置收货地址')
    def set_shipping_address(self):
        """设置收货地址"""
        try:
            element_1 = BASE_DIR + r"/element_picture/提交订单页/默认地址.png"
            if exists_1(element_1):
                log.info('已存在默认地址无需再设置')
            else:
                log.info('不存在默认地址，设置收货地址')
                AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/设置收货地址.png")
                AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/添加新地址.png")
                if exists_1(BASE_DIR + r"/element_picture/我的/我的地址页/收货人.png"):
                    AirtestBase().click_5(BASE_DIR + r"/element_picture/我的/我的地址页/收货人.png")
                    log.info('任意选一个我的地址')
                else:
                    MyAddressPage().add_address()
                    AirtestBase().click_5(BASE_DIR + r"/element_picture/我的/我的地址页/收货人.png")  # 添加地址后还要选中
        except Exception as e:
            log.error(f'设置收货地址出现异常为：{e}')
            log.info('不存在默认地址，设置收货地址')
            AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/设置收货地址.png")
            AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/添加新地址_win7.png")
            if exists_1(BASE_DIR + r"/element_picture/我的/我的地址页/收货人.png"):
                AirtestBase().click_5(BASE_DIR + r"/element_picture/我的/我的地址页/收货人.png")
                log.info('任意选一个我的地址')
            else:
                MyAddressPage().add_address()
                AirtestBase().click_5(BASE_DIR + r"/element_picture/我的/我的地址页/收货人.png")  # 添加地址后还要选中
            raise e

    @allure.step('提交订单页面选择优惠券')
    def select_coupon(self, select_coupon_mode):
        """
        提交订单页面选择优惠券
        select_coupon_mode=0：默认不用优惠券
        select_coupon_mode=1：选择优惠券
        """
        try:
            element_2 = BASE_DIR + r"/element_picture/提交订单页/快递配送.png"
            AirtestBase().click_5(element_2)  # 点击后才能向下滑动
            AirtestBase().up_or_down('down')
            if select_coupon_mode == 1:
                log.info('选择优惠券')
                AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/选择优惠券.png")
                pass  # 待补充

            elif select_coupon_mode == 0:
                log.info('不使用优惠券')
        except Exception as e:
            log.error(f'提交订单页面选择优惠券出现异常为：{e}')
            raise e

    @allure.step('提交订单页面，开具发票')
    def invoicing(self, invoicing_mode, text_1='内部测试请忽略', text_2='18665825382'):
        """
        提交订单页面，开具发票
        invoicing_mode=0：默认不操作
        invoicing_mode=1：开具发票
        invoicing_mode=2：不开发票（前提是已开具发票）
        """
        try:
            if invoicing_mode == 1:
                log.info('提交订单页面，开具发票')
                AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/无需开具发票.png")
                AirtestBase().click_5_input(text_1, BASE_DIR + r"/element_picture/提交订单页/开具发票/填写抬头名称.png")
                AirtestBase().click_5_input(text_2, BASE_DIR + r"/element_picture/提交订单页/开具发票/填写手机号码.png")
                AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/开具发票/提交申请.png")
            elif invoicing_mode == 2:
                log.info('提交订单-开具发票页：不开发票')
                AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/已填写发票信息.png")
                AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/开具发票/不开发票.png")
            elif invoicing_mode == 0:
                log.info('不开发票')
        except Exception as e:
            log.error(f'提交订单页面，开具发票出现异常为：{e}')
            raise e

    @allure.step('提交订单页面，填写备注')
    def input_remarks_text(self, input_text='内部自动化测试请忽略'):
        """提交订单页面，填写备注"""
        try:
            log.info(f'填写备注:{input_text}')
            AirtestBase().click_5_input(input_text, BASE_DIR + r"/element_picture/提交订单页/添加备注编辑框.png")
        except Exception as e:
            log.error(f'填写备注出现异常为：{e}')
            raise e

    @allure.step('提交订单页面，选择支付方式')
    def select_payment_method(self, pay):
        """提交订单页面，选择支付方式"""
        try:
            log.info(f'选择【{pay}】方式')
            element_1 = BASE_DIR + fr"/element_picture/提交订单页/{pay}.png"
            AirtestBase().click_5(element_1)
        except Exception as e:
            log.error(f'提交订单页面，选择支付方式出现异常为：{e}')
            raise e

    @allure.step('提交订单页面，关闭微信支付二维码')
    def close_qr_code(self):
        """提交订单页面，关闭微信支付二维码"""
        try:
            log.info('提交订单页面，关闭微信支付二维码')
            AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/关闭二维码.png")
            return SubmitOrderPage()
        except Exception as e:
            log.error(f'提交订单页面，关闭微信支付二维码出现异常为：{e}')
            raise e

    @allure.step('完成支付页面，查看订单')
    def view_order(self):
        """支付后，查看订单"""
        try:
            log.info('完成支付页面，查看订单')
            AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/查看订单.png")
            return OrderDetailsPage()
        except Exception as e:
            log.error(f'完成支付页面，查看订单出现异常为：{e}')
            raise e

    @allure.step('支付后，返回首页')
    def back_to_home(self):
        """支付后，返回首页"""
        try:
            from po.jinhua.applets_po.home.home_page import HomePage
            log.info('支付后，返回首页')
            AirtestBase().click_5(BASE_DIR + r"/element_picture/提交订单页/返回首页.png")
            return HomePage()
        except Exception as e:
            log.error(f'支付后，返回首页出现异常为：{e}')
            raise e
